package com.zp.self.module.level_4_算法练习.数据结构.数组;

import java.util.ArrayList;
import java.util.List;

/**
 * @author By ZengPeng
 */
public class 力扣_228_汇总区间 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_228_汇总区间().summaryRanges(new int[]{0,1,2,4,5,7}));
        System.out.println(new 力扣_228_汇总区间().summaryRanges(new int[]{0,2,3,4,6,8,9}));
    }

    /**
     * 题目：给定一个  无重复元素 的 有序 整数数组 nums 。
     * 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说，nums 的每个元素都恰好被某个区间范围所覆盖，并且不存在属于某个范围但不属于 nums 的数字 x 。
     * 列表中的每个区间范围 [a,b] 应该按如下格式输出：
     * "a->b" ，如果 a != b
     * "a" ，如果 a == b
     *
     * 示例 1：
     * 输入：nums = [0,1,2,4,5,7]
     * 输出：["0->2","4->5","7"]
     * 解释：区间范围是：
     * [0,2] --> "0->2"
     * [4,5] --> "4->5"
     * [7,7] --> "7"
     *
     * 分析：
     *      1.遍历一遍
     *
     *      2.遍历 i- [i-1]  == i+1-i
     *
     * 边界值注意：
     *      1.卧槽 只用nums[i+1] -  nums[i]  !=1 就算区间，我还以为是等差数列呢....想复杂了
     *      2.空数组，1数组
     **/
    public List<String> summaryRanges(int[] nums) {
        int length = nums.length;
        List<String> res = new ArrayList<>();
        if(length==0)return res;

        StringBuilder sb= new StringBuilder();
        int low=0,high=0;//只有一个元素
        sb.append(nums[low]);
        for (int i = 1; i < length; i++) {
            if(nums[i]-nums[i-1] ==1){
                high++;
            }else {
                if(low!=high)sb.append("->").append(nums[high]);
                res.add(sb.toString());
                sb= new StringBuilder();
                low=high=high+1;
                if(high>=length)break;
                sb.append(nums[low]);
            }
        }
        if(low!=high)sb.append("->").append(nums[high]);
        res.add(sb.toString());
        return res;
    }
}
